import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'

import { createHtmlPlugin } from 'vite-plugin-html'

// widdicss
import WindiCSS from 'vite-plugin-windicss'

// 自动加载Vue相关组合Api unplugin-auto-import
import AutoImport from 'unplugin-auto-import/vite'
// 组件按需自动加载 unplugin-vue-components
import Components from 'unplugin-vue-components/vite'
// import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'; //antd
import {  ElementPlusResolver, } from 'unplugin-vue-components/resolvers'  //el plus

// resolve
import { resolve } from 'path'

// 打包代码压缩
import viteCompression from 'vite-plugin-compression';

// 开发环境地址
const serverUrl = 'https://jsonplaceholder.typicode.com/'

// https://vitejs.dev/config/
export default defineConfig(({ command, mode }:any)=>{
  const env = loadEnv(mode, process.cwd(), '')
  // console.log('mode:==>',mode)
  return {
    // base: env.VITE_APP_PATH,
    build: {
      // 打包输出目录
      outDir: env.VITE_APP_OUT_DIR,
      assetsDir: 'static',
      minify: 'esbuild', 

      // 生产环境清楚console 方法2
      // minify: 'terser',
      // terserOptions: {
      //   compress: {
      //     drop_console: true,
      //     drop_debugger: true
      //   }
      // },
    },
    esbuild: {
      // 生产环境去掉 console、debugger
      drop: mode === 'development' ? [] : ['console', 'debugger'],
    },
    server: {
      // https://jsonplaceholder.typicode.com/posts
      // port: 4001,
      open: true, //自动打开
      proxy: { // 本地开发环境通过代理实现跨域，生产环境使用 nginx 转发
        '/jsonApi': {
          target: 'https://jsonplaceholder.typicode.com/',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/jsonApi/, '')
        },
        '/api': {
          target: 'http://ceshi13.dishait.cn',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, ''),
        },
        '/dishaApi': {
          target: 'http://ceshi13.dishait.cn',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/loginapi/, ''),
        },
        
      }
    },
    plugins: [
      vue(),

      // windicss
      WindiCSS(),

      // 全局引入vue相关api
      AutoImport({
        imports:["vue","vue-router",'pinia'],
        dts:'src/types/auto-import.d.ts',   // 路径下自动生成文件夹存放全局指令
        resolvers: [ElementPlusResolver()],
      }),

      // 自定义组件的全局引用
      Components({
        dirs:['src/components/**'],
        dts: 'src/types/components.d.ts',
        // 这个引用 使消息提示不能显示
        resolvers: [
          ElementPlusResolver({

          }),
        ],
      }),

      // 打包压缩
      viteCompression({
        //生成压缩包gz
        verbose: true, // 输出压缩成功
        disable: false, // 是否禁用
        threshold: 10240, // 体积大于阈值会被压缩，单位是b
        algorithm: 'gzip', // 压缩算法
        ext: '.gz',// 生成的压缩包后缀
      }),
      
      // 配置html文件
      createHtmlPlugin({
        minify: true,
        /**
         * 在这里写entry后，你将不需要在`index.html`内添加 script 标签，原有标签需要删除
         * @default src/main.ts
         */
        // entry: 'src/main.ts',
        /**
         * 如果你想将 `index.html`存放在指定文件夹，可以修改它，否则不需要配置
         * @default index.html
         */
        // template: 'public/index.html',
        /**
         * 需要注入 index.html ejs 模版的数据
         */
        inject: {
          data: {
            title: env.VITE_APP_TITLE,
          }
        }
      })
      
    ],
    // 路径快捷引用
    resolve: {
      alias: {
        '@': resolve(__dirname, 'src'), // 路径别名
        '/&': './src/assets/' // 其他路径别名-图片 
      },
      extensions: ['.js', '.json', '.ts', '.vue'] // 使用路径别名时想要省略的后缀名，可以自己 增减
    },
  }
  
})
